﻿using System;
using System.Runtime.Intrinsics.Arm;

namespace Lesson11_封装_内部类与分部类
{
    #region 一 内部类
    //概念
    //在一个类中再申明一个类

    //特点
    //使用时需要使用包裹的类点出使用

    //作用
    //表示内部类是包裹的类的一部分

    //注意
    //注意访问修饰符
    class Person
    {
        public Body body;

        public class Body
        {
            public Arm leftArm;
            public Arm rightArm;

            public class Arm
            {

            }
        }
    }
    #endregion

    #region 二 分部类
    //概念
    //把一个类分成几部分进行申明

    //关键字
    //partial

    //作用
    //分部描述一个类
    //增加程序拓展性

    //注意
    //分部类可以写在多个脚本文件中
    //分部类的访问修饰符必须一致
    //分部类中不能有重复成员
    partial class Student
    {
        int age;
        string name;
    }
    partial class Student
    {
        int num;
        //int age;
        //不能有重复成员 否则会报错
    }
    #endregion

    #region 三 分部方法
    //概念
    //将方法的申明与实现分离
    //特点
    //1.不能加访问修饰符，默认为私有
    //2.只能在分部类中申明
    //3.返回值只能是void
    //4.可以有参数 但不能使用out关键字

    //局限性大 了解即可
    partial class Class1
    {
        int age;
        string name;
        //申明方法
        partial void Fun();
    }
    partial class Class1
    {
        int num;
        //实现方法

        partial void Fun()
        {
            //实现逻辑
        }
    }
    #endregion
    class Program
    {
        static void Main(string[] args)
        {
            //内部类的使用
            Person person = new Person();
            Person.Body body = new Person.Body();
            Person.Body.Arm arm1 = new Person.Body.Arm();
            Person.Body.Arm arm2 = new Person.Body.Arm();
            person.body = body;
            body.leftArm = arm1;
            body.rightArm = arm2;
            body.leftArm = new Person.Body.Arm();
        }
    }
}